package com.dys.teststreamapi11;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * @className: com.dys.teststreamapi11.StreamAPITest
 * @description: stream串流和并行流
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/01 下午4:39
 */
public class StreamAPITest14 {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        streamToParallelOperator();
    }

    /**
     * 串行流: 在一个线程上面执行
     */
    private static void streamToSerialStream() {
        Stream.of(1, 2, 5, 8, 9, 11, 22).filter(s -> {
            System.out.println(Thread.currentThread() + " ==> " + s);
            return s > 3;
        }).count();
    }

    /**
     * 并行流的获取方式: 1.通过List接口中的parallelStream方法来获取 2.通过已有的串行流转换为并行流(parallel)
     * parallelStream其实就是一个并行执行的流，它通过默认的ForkJoinPool，可以提高多线程任务的速度。
     */
    private static void streamToParallel() {
        List<Integer> list = new ArrayList<>();
        // 1.通过List接口直接获取并行流
        Stream<Integer> integerStream = list.parallelStream();
        // 2.将已有的串行流转换为并行流
        Stream<Integer> parallel = Stream.of(1, 2, 55, 77, 22, 99).parallel();
    }

    /**
     * 并行流操作
     */
    private static void streamToParallelOperator() {
        Stream.of(11, 22, 55, 33, 77, 99).parallel()
                .filter(s -> {
                    System.out.println(Thread.currentThread() + " ==> " + s);
                    return s > 11;
                }).count();
    }

}
